package com.java.test3;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @author luzhikun
 * @date 2020/12/20-21:20
 * <p>
 * 异常处理的方式二：throws+异常类型
 * <p>
 * 1."throws+异常类型"  写在方法的声明处，指明此方法执行时，指明这是要抛出的异常
 * <p>
 * 一旦方法体执行时，出现异常，仍会在异常处生成一个该异常类的对象，此对象满足throws后的类型时，就会被抛出，
 * 异常代码后续的代码，就不再执行了
 * 相对于此方法来说，这个异常就被解决了
 * <p>
 * 2.体会：”try-catch-finally“：真正的将异常处理掉了
 * throws的方式只是将异常抛给了方法的调用者，并没有将方法处理掉
 * <p>
 * 3.开发中如何选择使用"try-catch-finally"还是throws？
 * <p>
 * 3.1如果父类中被重写的方法没有用throws方式处理异常，则子类重写的方法也不能使用throws，意味着如果子类重写的方法中有异常的话，
 * 必须用“try-catch-finally”的方式解决次异常
 * 3.2执行的方法a中先后又调用了另外的几个方法，这几个方法之间又是递进关系，我们建议这些方法使用throws进行处理，而在执行的方法a中，
 * 可以考虑使用try-catch-finally的方式处理
 */
public class ExceptionTest_3 {
    public static void main(String[] args) {
        //编译时异常
        try {
            test3();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        test4();
    }

    public static void test4() {
        try {
            test3();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void test3() throws FileNotFoundException, IOException {
        test2();
    }

    public static void test2() throws FileNotFoundException, IOException {
        File file = new File("helowold");
        FileInputStream fis = new FileInputStream(file);
        int data = fis.read();
        while (data != -1) {
            System.out.println((char) data);
            data = fis.read();
        }
        fis.close();
    }
}
